package utwente.sem.eindopdracht;
import java.util.ArrayList;
import java.util.List;

/**
 * Een Blauwdruk is een object met informatie over de opbouw van een product. Per stap kan worden
 * aangegeven wat er precies moet gebeuren. Een Robot kan vervolgens de stappen uitlezen en per 
 * robot kan er 1 stap worden uitgevoerd.
 * 
 * @author Richard Heijblom & Mark Wienk
 *  
 */
public class Blauwdruk {

	private List<String> stappen;

	/**
	 * Een Blauwdruk is een object met informatie over de opbouw van een product. Per stap kan worden
	 * aangegeven wat er precies moet gebeuren. Een Robot kan vervolgens de stappen uitlezen en per 
	 * robot kan er 1 stap worden uitgevoerd.
	 */
	public Blauwdruk() {
		stappen = new ArrayList<String>();
	}
	
	/**
	 * Verkrijg het aantal stappen in de Blauwdruk
	 * @return aantal stappen (int)
	 */
	public int getAantalStappen() {
		return stappen.size();
	}

	/**
	 * Vul de informatie voor een bepaalde stap in
	 * @param i het nummer van de stap
	 * @param omschrijving de omschrijving van de stap
	 */
	public void setStap(int i, String omschrijving) {
		stappen.add(i, omschrijving);
	}

	/**
	 * Verkrijg de beschrijving van de stap aan de hand van het stapnummer 
	 * @param stap het stapnummer
	 * @return de beschrijving van de stap
	 */
	public String getStap(int stap) {
		return stappen.get(stap);
	}
	
	/**
	 * Voeg een stap toe aan de blauwdruk.
	 */
	private void addStap() {
		Tui.getUI().toonBericht("U kunt hieronder een beschrijving van de stap toevoegen");
		Tui.getUI().toonBericht("Voer eerst het nummer van de stap in (tussen de 0 en " + stappen.size() + ").");
		int id = Tui.getUI().getNumeriekeInvoer(0, stappen.size());
		Tui.getUI().toonBericht("Beschrijf de stap in Robottaal, onderdelen kunnen worden aangegeven dmv onderdeel naam");
		String beschrijving = Tui.getUI().getTekstInvoer();
		setStap(id,beschrijving);
	}
	
	/**
	 * Bewerk een stap in de blauwdruk.
	 */
	private void bewerkStap() {
		Tui.getUI().toonBericht("U kunt hieronder een beschrijving van de stap wijzigen");
		Tui.getUI().toonBericht("Voer eerst het nummer van de stap in (tussen de 0 en " + stappen.size() + ".");
		int id = Tui.getUI().getNumeriekeInvoer(0, stappen.size());
		Tui.getUI().toonBericht("Geef nu een beschrijving van de stap in");
		String beschrijving = Tui.getUI().getTekstInvoer();
		stappen.remove(id);
		setStap(id, beschrijving);
	}
	
	/**
	 * Geeft een menu met CRUD acties voor Blauwdruk.
	 */
	public void showMenu() {
		String[] keuzeOpties = {
			"Terug naar het vorige menu",
			"Nieuwe stap",
			"Bekijk stappen",
			"Bewerk stap",
			"Verwijder stap"
		};
		switch(Tui.getUI().toonMenu("Maak een keuze uit het menu", keuzeOpties)) {
			case 0:
				return;
			case 1:
				addStap();
				showMenu();
				break;
			case 2:
				Tui.getUI().toonLijst("De volgende stappen zijn in het systeem bekend: ", stappen.toArray());
				Tui.getUI().toonBericht("");
				showMenu();
				break;
			case 3:
				bewerkStap();
				showMenu();
				break;
			case 4:
				if(stappen.size() > 0) {
					Tui.getUI().toonBericht("Geef een Stap nummer op");
					stappen.remove(Tui.getUI().getNumeriekeInvoer(0, stappen.size()));
					Tui.getUI().toonBericht("Stap succesvol verwijderd");
				} else {
					Tui.getUI().toonBericht("Geen productRuns aanwezig");
				}
				showMenu();
				break;
		}		
	}
}
